Imports System.Data.SqlClient
Imports System.Web
Imports System.Configuration

Public Class cFlusso
    Inherits Connessione

    Private _anno As String
    Private _dataCreazione As String
    Private _importo As String
    Private _nomeSupporto As String
    Private _codSia As String
    Private _codAbi As String
    Private _codCab As String
    Private _tipoInd As String
    Private _id As String
    Private _datascadenza As String
    Private _iscritti As String


    Private _idControparte As String
    Private _nominativo As String
    Public Property idControparte() As String
        Get
            Return _idControparte
        End Get
        Set(ByVal Value As String)
            _idControparte = Value
        End Set
    End Property
    Public Property nominativo() As String
        Get
            Return _nominativo
        End Get
        Set(ByVal Value As String)
            _nominativo = Value
        End Set
    End Property


    Public Property iscritti() As String
        Get
            Return _iscritti
        End Get
        Set(ByVal Value As String)
            _iscritti = Value
        End Set
    End Property


    Public Property anno() As String
        Get
            Return _anno
        End Get
        Set(ByVal Value As String)
            _anno = Value
        End Set
    End Property
    Public Property dataScadenza() As String
        Get
            Return _datascadenza
        End Get
        Set(ByVal Value As String)
            _datascadenza = Value
        End Set
    End Property
    Public Property id() As String
        Get
            Return _id
        End Get
        Set(ByVal Value As String)
            _id = Value
        End Set
    End Property
    Public Property dataCreazione() As String
        Get
            Return _dataCreazione
        End Get
        Set(ByVal Value As String)
            _dataCreazione = Value
        End Set
    End Property
    Public Property importo() As String
        Get
            Return _importo
        End Get
        Set(ByVal Value As String)
            _importo = Value
        End Set
    End Property
    Public Property nomeSupporto() As String
        Get
            Return _nomeSupporto
        End Get
        Set(ByVal Value As String)
            _nomeSupporto = Value
        End Set
    End Property

    Public Property codSia() As String
        Get
            Return _codSia
        End Get
        Set(ByVal Value As String)
            _codSia = Value
        End Set
    End Property
    Public Property codAbi() As String
        Get
            Return _codAbi
        End Get
        Set(ByVal Value As String)
            _codAbi = Value
        End Set
    End Property
    Public Property codCab() As String
        Get
            Return _codCab
        End Get
        Set(ByVal Value As String)
            _codCab = Value
        End Set
    End Property
    Public Property tipoInd() As String
        Get
            Return _tipoInd
        End Get
        Set(ByVal Value As String)
            _tipoInd = Value
        End Set
    End Property


    'pagamenti
    Private _CF As String
    Private _pagato As Boolean
    Private _causale As String
    Private _datapag As String

    Public Property CF() As String
        Get
            Return _CF
        End Get
        Set(ByVal Value As String)
            _CF = Value
        End Set
    End Property
    Public Property pagato() As Boolean
        Get
            Return _pagato
        End Get
        Set(ByVal Value As Boolean)
            _pagato = Value
        End Set
    End Property
    Public Property causale() As String
        Get
            Return _causale
        End Get
        Set(ByVal Value As String)
            _causale = Value
        End Set
    End Property
    Public Property dataPag() As String
        Get
            Return _datapag
        End Get
        Set(ByVal Value As String)
            _datapag = Value
        End Set
    End Property


    Public Sub caricaUltimo()
        Dim sql As String = "SELECT DISTINCT TOP 1 Anno, convert(char(10),Data_Scadenza,103) as data, Importo FROM PagamentiQuote ORDER BY Anno DESC"
        Dim dt As DataTable = getDataTable(sql)
        If dt.Rows.Count > 0 Then
            _importo = Utility.numXvideo(dt.Rows(0)("importo"))
            _datascadenza = dt.Rows(0)("data")
            _anno = dt.Rows(0)("anno")
        Else
            _importo = ""
            _datascadenza = Format(Today, "dd/MM/yyyy")
            _anno = Year(Today)
        End If
    End Sub

    Public Sub getControparte(ByVal cf As String)
        Dim dt As DataTable = getDataTable("select id, cognome + ' ' + nome as nominativo from controparti where codicefiscale='" & cf & "'")
        If dt.Rows.Count > 0 Then
            _idControparte = dt.Rows(0)("id")
            _nominativo = dt.Rows(0)("nominativo")
        Else
            _idControparte = ""
            _nominativo = ""
        End If
    End Sub


 
    Public Sub aggiornaControparte(ByVal cf As String)
        getControparte(cf)

        If _idControparte = "" Then
            Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand("insertControparte", getConnection)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("@cf", cf)
            cmd.Parameters.Add("@albo", HttpContext.Current.Session("albo"))
            cmd.Parameters.Add("@tipo", ConfigurationSettings.AppSettings("contropartiIscritti"))
            _idControparte = cmd.ExecuteScalar
            cmd.Connection.Close()
        End If


    End Sub

    Public Sub aggiorna()
        Dim sql As String = "update flussiMav set nome_supporto = '" & _nomeSupporto & "', creatoflusso=1 where id = " & _id
        eseguiSql(sql)
    End Sub

    Public Sub trovaFlusso()
        Dim sql As String = "select id from flussiMav where nome_supporto ='" & Trim(_nomeSupporto) & "'"
        _id = getValore(sql)
    End Sub

    Public Sub aggiornaPagamento()
        Dim sql As String = "update pagamentiQuote set data_pagamento = @dataPag, pagato=@pagato, causale=@causale where codice_fiscale=@cf and anno=@anno and albo=" & HttpContext.Current.Session("albo")
        Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand(sql, getConnection)
        cmd.Parameters.Add("@datapag", _datapag)
        cmd.Parameters.Add("@pagato", _pagato)
        cmd.Parameters.Add("@causale", _causale)
        cmd.Parameters.Add("@cf", _CF)
        cmd.Parameters.Add("@anno", _anno)

        cmd.ExecuteNonQuery()
        cmd.Connection.Close()
    End Sub

    Public Sub inserisci()
        Dim sql As String = "insert into flussiMav (Anno, Data_Creazione, Importo, Nome_Supporto,  CodSIAmitt, " & _
                "CodABIric, CodCABbanca, TipoIndirizzo, albo) values (@Anno, @Data_Creazione, @Importo, @Nome_Supporto, @CodSIAmitt, " & _
                "@CodABIric, @CodCABbanca, @TipoIndirizzo, @albo)"

        Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand(sql, getConnection)
        cmd.Parameters.Add("@anno", _anno)
        cmd.Parameters.Add("@data_creazione", _dataCreazione)
        cmd.Parameters.Add("@importo", _importo)
        cmd.Parameters.Add("@nome_supporto", _nomeSupporto)
        cmd.Parameters.Add("@CodSIAmitt", _codSia)
        cmd.Parameters.Add("@CodABIric", _codAbi)
        cmd.Parameters.Add("@CodCABbanca", _codCab)
        cmd.Parameters.Add("@TipoIndirizzo", _tipoInd)
        cmd.Parameters.Add("@albo", HttpContext.Current.Session("albo"))


        cmd.ExecuteNonQuery()
        cmd.Connection.Close()



    End Sub

    Public Sub aggiornaPag()
        'carico gli iscritti e li inserisco nella tabella pagamenti
        Dim conn As SqlConnection = getConnection()
        Dim sql As String = IIf(_iscritti = "Iscritti", "aggiornaQuoteIscritti", "aggiornaQuotePraticanti")
        Dim updateCMD As SqlCommand = New SqlCommand(sql, conn)
        updateCMD.CommandType = CommandType.StoredProcedure

        updateCMD.Parameters.Add("@anno", _anno)
        updateCMD.Parameters.Add("@data", (_anno - 1) & "1231")
        updateCMD.Parameters.Add("@dataScadenza", _datascadenza)
        updateCMD.Parameters.Add("@importo", _importo)
        updateCMD.Parameters.Add("@albo", HttpContext.Current.Session("albo"))

        updateCMD.ExecuteNonQuery()
        conn.Close()


    End Sub

    Public Function calcolaQuoteIscritti()
        Dim sql As String = "select  CF, cognome + ' ' + nome as nominativo, '" & _importo & "' as importo," & _anno & " as anno from Anagrafica  " & _
            " INNER JOIN AlboIscritti ON Anagrafica.ID = AlboIscritti.Id_ana WHERE  AlboIscritti.storico=0 and   " & _
            " year(AlboIscritti.DataIscrizione) < " & _anno & " and Anagrafica.albo=" & HttpContext.Current.Session("albo")
        Return getDataTable(sql)

    End Function

    Public Function calcolaQuotePraticanti()
        Dim sql As String = "select  CF, cognome + ' ' + nome as nominativo, '" & _importo & "' as importo," & _anno & " as anno from Anagrafica  " & _
            " INNER JOIN Praticanti ON Anagrafica.ID = Praticanti.Id_ana WHERE  Praticanti.storico=0 and   " & _
            " year(Praticanti.Data_isc) < " & _anno & " and Anagrafica.albo=" & HttpContext.Current.Session("albo")
        Return getDataTable(sql)

    End Function

    Public Sub aggiornaIndirizzi()
        'carico gli iscritti e li inserisco nella tabella pagamenti
        Dim conn As SqlConnection = getConnection()
        Dim updateCMD As SqlCommand = New SqlCommand("aggiornaIndirizziQuote", conn)
        updateCMD.CommandType = CommandType.StoredProcedure

        updateCMD.Parameters.Add("@anno", _anno)
        updateCMD.Parameters.Add("@albo", HttpContext.Current.Session("albo"))
        updateCMD.Parameters.Add("@tipoInd", _tipoInd)

        updateCMD.ExecuteNonQuery()
        conn.Close()


    End Sub


End Class



Public Class cContabile
    Inherits Connessione

    Private _idBilancio As String
    Private _idEconomico As String
    Private _idResiduo As String
    Private _idAccertamento As String
    Private _idCompetenza As String
    Private _anno As String

    Public Property anno() As String
        Get
            Return _anno
        End Get
        Set(ByVal Value As String)
            _anno = Value
        End Set
    End Property
    Public Property idAccertamento() As String
        Get
            Return _idAccertamento
        End Get
        Set(ByVal Value As String)
            _idAccertamento = Value
        End Set
    End Property
    Public Property idBilancio() As String
        Get
            Return _idBilancio
        End Get
        Set(ByVal Value As String)
            _idBilancio = Value
        End Set
    End Property

    Public Property idEconomico() As String
        Get
            Return _idEconomico
        End Get
        Set(ByVal Value As String)
            _idEconomico = Value
        End Set
    End Property

    Public Sub getBilancio()
        _idbilancio = getValore("SELECT Id FROM Bilancio WHERE     (IdBilancioStato = 2)")
    End Sub


    Public Sub contabile(ByVal anno As Integer, ByVal numero As Integer)
        Dim sql As String = "SELECT PDCBilancio.Id, PDCBilancio.IdPDCEconomicoResidui, PDCBilancio.IdPDCEconomicoCompetenza, PDCEconomico.livello, PDCEconomico.sigla, PDCEconomico.IdPDCEconomicoTipoConto, PDCEconomico.IdBilancioRiclassificato, PDCEconomico.IdPDCEconomicoCodiceAutomazione " & _
            "FROM PDCBilancio INNER JOIN PDCEconomico ON PDCBilancio.IdPDCEconomicoCompetenza = PDCEconomico.Id WHERE PDCEconomico.IdPDCEconomicoCodiceAutomazione = 7"
        Dim cmd As SqlClient.SqlCommand

        Try
            Dim dr As DataRow = getDataTable(sql).Rows(0)
            _idCompetenza = dr("IdPDCEconomicoCompetenza")
            Dim idEconomicoResidui As String = dr("IdPDCEconomicoResidui")
            Dim livello As Integer = CInt(dr("livello"))
            Dim siglaCompetenza As String = creaSigla(dr("sigla"), _idCompetenza)
            Dim siglaResiduo As String = creaSigla(dr("sigla"), idEconomicoResidui)
            Dim descrizione As String = "Ruoli " & anno & " - N. iscritti al 31/12/" & (anno - 1) & ": " & numero
            Dim IdPDCEconomicoTipoConto As String = dr("IdPDCEconomicoTipoConto")
            Dim IdBilancioRiclassificato As String = dr("IdBilancioRiclassificato")
            Dim IdPDCEconomicoCodiceAutomazione As String = dr("IdPDCEconomicoCodiceAutomazione")

            sql = "insert into PDCEconomico (IdBilancio, IdPadre, Livello, Sigla, Descrizione, IdPDCEconomicoTipoConto, IdBilancioRiclassificato, IdPDCEconomicoCodiceAutomazione) " & _
                " values (@IdBilancio, @IdPadre, @Livello, @Sigla, @Descrizione, @IdPDCEconomicoTipoConto, @IdBilancioRiclassificato, @IdPDCEconomicoCodiceAutomazione); select @@IDENTITY;"

            'creo i 2 nuovi conti
            cmd = New SqlClient.SqlCommand(sql, getConnection)

            'competenza
            cmd.Parameters.Add("@idBilancio", _idBilancio)
            cmd.Parameters.Add("@idPadre", _idCompetenza)
            cmd.Parameters.Add("@livello", Str(livello + 1))
            cmd.Parameters.Add("@sigla", siglaCompetenza)
            cmd.Parameters.Add("@Descrizione", descrizione)
            cmd.Parameters.Add("@IdPDCEconomicoTipoConto", IdPDCEconomicoTipoConto)
            cmd.Parameters.Add("@IdBilancioRiclassificato", IdBilancioRiclassificato)
            cmd.Parameters.Add("@IdPDCEconomicoCodiceAutomazione", IdPDCEconomicoCodiceAutomazione)
            _idEconomico = cmd.ExecuteScalar

            'residuo
            cmd.Parameters("@idBilancio").Value = _idBilancio
            cmd.Parameters("@idPadre").Value = _idCompetenza
            cmd.Parameters("@livello").Value = Str(livello + 1)
            cmd.Parameters("@sigla").Value = siglaResiduo
            cmd.Parameters("@Descrizione").Value = descrizione
            cmd.Parameters("@IdPDCEconomicoTipoConto").Value = IdPDCEconomicoTipoConto
            cmd.Parameters("@IdBilancioRiclassificato").Value = IdBilancioRiclassificato
            cmd.Parameters("@IdPDCEconomicoCodiceAutomazione").Value = IdPDCEconomicoCodiceAutomazione

            _idResiduo = cmd.ExecuteScalar

        Catch ex As Exception
            _idBilancio = ""

        Finally
            If Not cmd Is Nothing Then cmd.Connection.Close()
        End Try


    End Sub


    Private Function creaSigla(ByVal sigla As String, ByVal idpadre As String) As String
        Dim nuova As String
        Dim cont As String = getValore("select count(id) from PDCEconomico where idPadre=" & idpadre)
        If cont Is System.DBNull.Value Then
            nuova = Trim(sigla) & ".0001"
        Else
            cont += 1
            nuova = Trim(sigla) & "." & Format(CInt(cont), "0000")
        End If
        Return nuova
    End Function

    Public Sub creaAccertamento(ByVal dataEmissione As String, ByVal idControparte As String, ByVal importo As String, ByVal deliberaNumero As String)
        Dim _progressivo As String = getValore("select max(progressivo)+1 from ImpegniAccertamenti where year(data) = " & _anno)
        Dim sql As String = "insert into ImpegniAccertamenti ( IdBilancio, Progressivo, ImpegnoAccertamento, Data, IdCapitolo, IdControparte, Descrizione, Importo, DeliberaNumero, liquidato, incassatoPagato) " & _
            " values (@IdBilancio, @Progressivo, 'A', @Data, @IdCapitolo, @IdControparte, @Descrizione, @Importo, @DeliberaNumero, 0, 0); select @@IDENTITY;"

        Dim cmd As SqlClient.SqlCommand = New SqlCommand(sql, getConnection)
        cmd.Parameters.Add("@idBilancio", _idBilancio)
        cmd.Parameters.Add("@progressivo", _progressivo)
        cmd.Parameters.Add("@data", Utility.FormattaDataxDB(dataEmissione))
        cmd.Parameters.Add("@idCapitolo", _idBilancio)
        cmd.Parameters.Add("@idControParte", idControparte)
        cmd.Parameters.Add("@Descrizione", "Quota Ruoli " & _anno)
        cmd.Parameters.Add("@Importo", CInt(Utility.numXdb(importo)))
        cmd.Parameters.Add("@DeliberaNumero", deliberaNumero)
        _idAccertamento = cmd.ExecuteScalar

        cmd.CommandText = "insert into ImpegniAccertamentiRighe (IdImpegniAccertamenti, NrRiga, Importo, IdPDCEconomico, liquidato, incassatoPagato) " & _
                    " values (@IdImpegniAccertamenti, 10, @Importo, @IdPDCEconomico,0,0)"
        cmd.Parameters.Clear()
        cmd.Parameters.Add("@IdImpegniAccertamenti", _idAccertamento)
        cmd.Parameters.Add("@importo", CInt(Utility.numXdb(importo)))
        cmd.Parameters.Add("@IdPDCEconomico", _idEconomico)

        cmd.ExecuteNonQuery()
        cmd.Connection.Close()

    End Sub

    Public Sub creaLibroGiornale(ByVal dataEmissione As String, ByVal nominativo As String, ByVal quota As String)
        Dim _progressivo = getValore("select max(progressivo)+1 from LibroGiornale where year(data) = " & _anno)

        Dim sql As String = "insert into libroGiornale (Progressivo, Data, Descrizione, IdImpegniAccertamenti, IdBilancio, IdMandatiReversali) " & _
              " values (@Progressivo, @Data, @Descrizione, @IdImpegniAccertamenti, @IdBilancio, @IdMandatiReversali); select @@IDENTITY;"
        Dim cmd As SqlClient.SqlCommand = New SqlCommand(sql, getConnection)
        cmd.Parameters.Add("@progressivo", _progressivo)
        cmd.Parameters.Add("@data", Utility.FormattaDataxDB(dataEmissione))
        cmd.Parameters.Add("@Descrizione", "Quota Ruoli " & _anno & " - " & nominativo)
        cmd.Parameters.Add("@IdImpegniAccertamenti", _idAccertamento)
        cmd.Parameters.Add("@IdBilancio", "")
        cmd.Parameters.Add("@IdMandatiReversali", SqlDbType.Int)
        cmd.Parameters("@IdMandatiReversali").Value = 0
        Dim _idLibroGiornale As String = cmd.ExecuteScalar


        cmd.CommandText = "insert into LibroGiornaleRighe ( IdLibroGiornale, IdPDCEconomico, Dare, Avere) " & _
                            " values (@IdLibroGiornale, @IdPDCEconomico,  @Dare, @Avere)"
        cmd.Parameters.Clear()

        'inserisco in avere
        cmd.Parameters.Add("@idLibroGiornale", _idLibroGiornale)
        cmd.Parameters.Add("@IdPDCEconomico", _idCompetenza)
        cmd.Parameters.Add("@Dare", SqlDbType.Money)
        cmd.Parameters("@Dare").Value = 0
        cmd.Parameters.Add("@Avere", SqlDbType.Money)
        cmd.Parameters("@Avere").Value = Utility.numXdb(quota)
        cmd.ExecuteNonQuery()


        'inserisco in dare
        cmd.Parameters("@IdPDCEconomico").Value = _idResiduo
        cmd.Parameters("@Dare").Value = Utility.numXdb(quota)
        cmd.Parameters("@Avere").Value = 0
        cmd.ExecuteNonQuery()

    End Sub


    Public Sub creaIncasso(ByVal idControparte As String, ByVal dataEmissione As String, ByVal nominativo As String, ByVal quota As String)

        _idAccertamento = getValore("select id from ImpegniAccertamenti WHERE IdControparte = " & idControparte & " AND Descrizione = 'Quota Ruoli " & _anno & "' ")
        _idResiduo = getValore("SELECT LibroGiornaleRighe.IdPDCEconomico FROM LibroGiornale INNER JOIN LibroGiornaleRighe ON LibroGiornale.Id = LibroGiornaleRighe.IdLibroGiornale " & _
                "WHERE LibroGiornale.IdImpegniAccertamenti = " & _idAccertamento & " AND (LibroGiornaleRighe.Avere = 0)")

        Dim _progressivo = getValore("select max(progressivo)+1 from LibroGiornale where year(data) = " & _anno)

        Dim sql As String = "insert into libroGiornale (Progressivo, Data, Descrizione, IdImpegniAccertamenti, IdBilancio, IdMandatiReversali) " & _
              " values (@Progressivo, @Data, @Descrizione, @IdImpegniAccertamenti, @IdBilancio, @IdMandatiReversali); select @@IDENTITY;"
        Dim cmd As SqlClient.SqlCommand = New SqlCommand(sql, getConnection)
        cmd.Parameters.Add("@progressivo", _progressivo)
        cmd.Parameters.Add("@data", Utility.FormattaDataxDB(dataEmissione))
        cmd.Parameters.Add("@Descrizione", "Incasso Quota " & _anno & " - " & nominativo)
        cmd.Parameters.Add("@IdImpegniAccertamenti", _idAccertamento)
        cmd.Parameters.Add("@IdBilancio", "")
        cmd.Parameters.Add("@IdMandatiReversali", SqlDbType.Int)
        cmd.Parameters("@IdMandatiReversali").Value = 0
        Dim _idLibroGiornale As String = cmd.ExecuteScalar


        cmd.CommandText = "insert into LibroGiornaleRighe ( IdLibroGiornale, IdPDCEconomico, Dare, Avere) " & _
                            " values (@IdLibroGiornale, @IdPDCEconomico,  @Dare, @Avere)"
        cmd.Parameters.Clear()

        'inserisco in avere
        cmd.Parameters.Add("@idLibroGiornale", _idLibroGiornale)
        cmd.Parameters.Add("@IdPDCEconomico", ConfigurationSettings.AppSettings("ContoEconomicoCCBancario"))
        cmd.Parameters.Add("@Avere", SqlDbType.Int)
        cmd.Parameters("@Avere").Value = 0
        cmd.Parameters.Add("@Dare", SqlDbType.Int)
        cmd.Parameters("@Dare").Value = Utility.numXdb(quota)
        cmd.ExecuteNonQuery()


        'inserisco in dare
        cmd.Parameters("@IdPDCEconomico").Value = _idResiduo
        cmd.Parameters("@Avere").Value = Utility.numXdb(quota)
        cmd.Parameters("@Dare").Value = 0
        cmd.ExecuteNonQuery()


    End Sub


End Class


